/*
 *  Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

// The functions in this file are called from native code. They can still be
// accessed even though they are declared private.

package org.webrtc.voiceengine;

import android.annotation.SuppressLint;
import android.content.Context;
import android.content.pm.PackageManager;
import android.media.AudioManager;

class AudioManagerAndroid {
	// Most of Google lead devices use 44.1K as the default sampling rate, 44.1K
	// is also widely used on other android devices.
	private static final int DEFAULT_SAMPLING_RATE = 44100;
	// Randomly picked up frame size which is close to return value on N4.
	// Return this default value when
	// getProperty(PROPERTY_OUTPUT_FRAMES_PER_BUFFER) fails.
	private static final int DEFAULT_FRAMES_PER_BUFFER = 256;

	private int mNativeOutputSampleRate;
	private boolean mAudioLowLatencySupported;
	private int mAudioLowLatencyOutputFrameSize;

	@SuppressLint("NewApi")
	@SuppressWarnings("unused")
	private AudioManagerAndroid(Context context) {
		AudioManager audioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);

		mNativeOutputSampleRate = DEFAULT_SAMPLING_RATE;
		mAudioLowLatencyOutputFrameSize = DEFAULT_FRAMES_PER_BUFFER;
		// if (android.os.Build.VERSION.SDK_INT >=
		// android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) {
		// String sampleRateString =
		// audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE);
		// if (sampleRateString != null) {
		// mNativeOutputSampleRate = Integer.parseInt(sampleRateString);
		// }
		// String framesPerBuffer =
		// audioManager.getProperty(AudioManager.PROPERTY_OUTPUT_FRAMES_PER_BUFFER);
		// if (framesPerBuffer != null) {
		// mAudioLowLatencyOutputFrameSize = Integer.parseInt(framesPerBuffer);
		// }
		// }
		mAudioLowLatencySupported = context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUDIO_LOW_LATENCY);
	}

	@SuppressWarnings("unused")
	private int getNativeOutputSampleRate() {
		return mNativeOutputSampleRate;
	}

	@SuppressWarnings("unused")
	private boolean isAudioLowLatencySupported() {
		return mAudioLowLatencySupported;
	}

	@SuppressWarnings("unused")
	private int getAudioLowLatencyOutputFrameSize() {
		return mAudioLowLatencyOutputFrameSize;
	}
}